# encoding: utf-8
"""
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    created by lane.chang on '13/05/2024'
    comment: 界面协作者
"""
import asyncio
from project.lib.common import session_maker
from project.service.agents.agent import Agent
from project.model.basic import User
from project.model.chatgpt import Advice
from project.core.function import match_texts

class GatherService:
    """
    """
    @staticmethod
    async def collect_advice(user: User, user_message):
        """ 搜集建议
        :return:
        """
        prompt = """
        #### 场景介绍:
        你是一名软件系统工作人员。需要搜集用户平时使用系统时，对系统或业务服务提出的改善建议。并精简提炼用户表示的建议内容。
        
        #### 建议类型:
        系统: 对系统的操作使用提供的改善建议。比如: "你们这个系统应该xxx"
        业务: 对非系统的其它方面提供的改善建议。比如: "服务人员说话语气不好", "你们酒店隔音不好"等等。
        其它: 以上系统和业务都不是的情况。
        
        #### 建议标识:
        是: 用户正在提出建议
        不是: 用户并不是在提出建议

        #### 用户对你说: {user_message}

        #### 输出格式:
        <reason>你的推理过程。。。</reason><response>你对用户说的话。。。</response><advice>建议标识</advice><type>建议类型</type><content>用户的建议内容</content>
        """
        res = await Agent(user, user_message=user_message, business_name='搜集建议').async_interact(prompt=prompt)
        result = match_texts(res, 'reason', 'advice', 'type', 'content', 'response')
        # 记录agent输入输出
        ret_data = dict()
        if result['advice'] != '是':
            return ret_data
        # 计入数据库
        with session_maker() as session:
            Advice.create_modify(
                session=session,
                dev_id=user.dev_id,
                bot_id=user.bot_id,
                user_id=user.user_id,
                user_message=user_message,
                advice_type=result['type'],
                content=result['content'])

        ret_data['response'] = result['response']
        ret_data['intent'] = 'advice'

        return ret_data


if __name__ == "__main__":
    """
    """
    user = User()
    user_message = "我建议系统提供一个反馈意见的机制"
    asyncio.run(GatherService.collect_advice(user=user, user_message=user_message))




